package com.csnj.nio;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;
import java.nio.charset.Charset;

/**
 * @author Sam.Lee E-mail:lishanman2007@163.com
 * @version Created：Nov 11, 2011 9:45:41 AM
 */
public class BaiduReader {

	private Charset charset = Charset.forName("GBK");
	private SocketChannel channel;

	public void readHTMLContent() {
		try {
			InetSocketAddress socketAddress = new InetSocketAddress(
					"www.baidu.com", 80);
			// step1:打开连接
			channel = SocketChannel.open(socketAddress);

			// step2：发送请求，使用GBK编码
			channel.write(charset.encode("GET " + "/ HTTP/1.1" + "\r\n\r\n"));

			// step3:读取数据
			ByteBuffer buffer = ByteBuffer.allocate(1024);
			while (channel.read(buffer) != -1) {
				buffer.flip();// flip方法在读缓冲区字节操作之前调用

				// 使用Charset.decode方法将字节转换为字符串
				System.out.println(charset.decode(buffer));

				// 清空缓冲
				buffer.clear();

			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (channel != null) {
				try {
					channel.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}

	}

	public static void main(String[] args) {
		new BaiduReader().readHTMLContent();
	}
}
